package com.jackstraw.jack_base.remote_command.entity;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * 配置
 */
@Data
@Slf4j
@Primary
@Component
@ConfigurationProperties(prefix = "jack.soft")
@EnableConfigurationProperties(JackSoftProperties.class)
public class JackSoftProperties {

    private Map<String, SoftProperties> jackSoftPropertiesMap = new HashMap<>();


    @Data
    public static class SoftProperties {

        /**
         * 前置软件名称
         */
        private List<String> beforeSoftName;

        /**
         * 后置软件名称
         */
        private List<String> afterSoftName;

        /**
         * 软件名称
         */
        private String softName;

        /**
         * 系统体系名称
         *
         * cluster 或 single
         */
        private String systemName;

        /**
         * 软件版本
         */
        private String version;

        /**
         * docker镜像
         */
        private String image;

        /**
         * 单机下在那个环境
         */
        private String connName;

        /**
         * 模式
         * 0：单个
         * 1：单机多个
         * 2：集群
         */
        private Integer model = 0;

        /**
         * 容器名称
         */
        private String containerName;

        /**
         * 是否是docker部署
         * <p>
         * 默认为docker部署
         */
        private Boolean dockerFlag = Boolean.TRUE;

        /**
         * 软件容器名称
         */
        private List<String> containerNameList;

        /**
         * 软件机器对应容器名称
         */
        private LinkedHashMap<String, List<String>> connContainerNameMap;

        /**
         * 执行方法前后需要执行的命令
         */
        private Map<String, Map<String, List<String>>> modelCmdStatusMap;
    }
}
